Lỗi cú pháp

Trong khoa học máy tính, một lỗi cú pháp (tiếng Anh: syntax error) là một lỗi về cú pháp của một chuỗi các ký tự hoặc dấu hiệu được dự định viết trong thời gian biên dịch. Một chương trình sẽ không biên dịch cho đến khi tất cả các lỗi cú pháp được sửa lại. Tuy nhiên, đối với các ngôn ngữ được thông dịch, một lỗi cú pháp có thể được phát hiện trong khi thực hiện chương trình và các thông báo lỗi của trình thông dịch có thể không phân biệt các lỗi cú pháp với các lỗi khác. Có một số ý kiến bất đồng khi nói xem những lỗi nào là "lỗi cú pháp". Ví dụ, một số người cho rằng việc sử dụng giá trị của một biến chưa được khởi tạo trong ngôn ngữ Java là một lỗi cú pháp, nhưng nhiều người khác không đồng ý[1][2] và phân loại đây là lỗi ngữ nghĩa tĩnh. Trong các máy tính gia đình 8-bit sử dụng trình thông dịch BASIC làm giao diện người dùng chính, tin nhắn lỗi SYNTAX ERROR trở nên có phần nổi tiếng, vì đây là phản hồi cho bất kỳ lệnh hoặc đầu vào nào của người dùng mà trình thông dịch không thể phân tích được cú pháp. Lỗi cú pháp cũng có thể xảy ra khi một phương trình không hợp lệ được nhập vào máy tính bỏ túi. Ví dụ, lỗi này có thể bị xảy ra khi mở ngoặc mà không đóng ngoặc, hoặc ít phổ biến hơn là nhập nhiều dấu phẩy vào một số. Sau đây là một câu lệnh Java đúng về mặt cú pháp: trong khi câu lệnh sau đây thì không: Về mặt lý thuyết, ví dụ thứ hai sẽ in biến Hello World thay vì từ Hello World. Tuy nhiên, một biến trong Java không thể có khoảng trắng ở giữa, vì vậy dòng lệnh đúng về mặt cú pháp sẽ là System.out.println(Hello_World). Một trình biên dịch sẽ gắn cờ một lỗi cú pháp khi mã nguồn được cung cấp không đáp ứng các yêu cầu của ngữ pháp ngôn ngữ đó. Lỗi định kiểu (chẳng hạn như cố gắng dùng toán tử tăng ++ cho biến luận lý (boolean) trong Java) và lỗi biến không khai báo đôi khi được coi là lỗi cú pháp khi chúng được phát hiện tại thời điểm biên dịch. Tuy nhiên,người ta thường phân loại các lỗi đó là các lỗi ngữ nghĩa tĩnh.[2][3][4]